home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-10-24 | 3.5 KB | 117 lines | [TEXT/CWIE] |
- // ----------------------------------------------------------------------------
- // Accessors.t
- // ----------------------------------------------------------------------------
- // By Jean-François Brouillet, Copyright © 1995
- //
- // V0.001 951013 JFB Tests passed.
- // V0.000 951012 JFB Creation
- //
- // No restriction on use. But please, use with caution as this is not
- // thoroughly tested.
-
-
- #ifndef __ACCESSORS__
- #define __ACCESSORS__
-
- #include <string.h>
-
- // ----------------------------------------------------------------------------
- // template align32bits
- // ----------------------------------------------------------------------------
- template <class T>
- inline T align32bits(T inVal)
- {
- size_t vSizer = (size_t) inVal;
- vSizer += 3;
- vSizer &= ~3;
- return (T) vSizer;
- }
-
- // ----------------------------------------------------------------------------
- // template peek
- // ----------------------------------------------------------------------------
- template <class T, class U>
- inline void peek(T & inVal, U * ioAddress, long inOffset)
- {
- size_t vSizer = * (size_t *) ioAddress;
- vSizer += inOffset;
- inVal = * (T *) vSizer;
- }
-
- // ----------------------------------------------------------------------------
- // template fetch
- // ----------------------------------------------------------------------------
- template <class T, class U>
- inline void fetch(T & inVal, U * ioAddress)
- {
- size_t vSizer = * (size_t *) ioAddress;
- vSizer += sizeof(T);
- inVal = * (T *) *ioAddress;
- * ioAddress = (U) vSizer;
- }
-
- // ----------------------------------------------------------------------------
- // template prefetch
- // ----------------------------------------------------------------------------
- template <class T, class U>
- inline void prefetch(T & inVal, U * ioAddress)
- {
- size_t vSizer = * (size_t *) ioAddress;
- vSizer -= sizeof(T);
- inVal = * (T *) vSizer;
- * ioAddress = (U) vSizer;
- }
-
- // ----------------------------------------------------------------------------
- // template fetch_array
- // ----------------------------------------------------------------------------
- template <class T, class U>
- inline void fetch_array(T inVal, U * ioAddress)
- {
- size_t vSizer = * (size_t *) ioAddress;
- unsigned char * p = (unsigned char *) *ioAddress;
- unsigned char length = 1 + *p;
- vSizer += length;
- ::memcpy(inVal, *ioAddress, length);
- * ioAddress = (U) vSizer;
- }
-
- // ----------------------------------------------------------------------------
- // template stash
- // ----------------------------------------------------------------------------
- template <class T, class U>
- inline void stash(T inVal, U * ioAddress)
- {
- size_t vSizer = * (size_t *) ioAddress;
- * (T *) vSizer = inVal;
- vSizer += sizeof(T);
- * ioAddress = (U) vSizer;
- }
-
- // ----------------------------------------------------------------------------
- // template prestash
- // ----------------------------------------------------------------------------
- template <class T, class U>
- inline void prestash(T inVal, U * ioAddress)
- {
- size_t vSizer = * (size_t *) ioAddress;
- vSizer -= sizeof(T);
- * (T *) vSizer = inVal;
- * ioAddress = (U) vSizer;
- }
-
- // ----------------------------------------------------------------------------
- // template stash_array
- // ----------------------------------------------------------------------------
- template <class T, class U>
- inline void stash_array(T inVal, U * ioAddress)
- {
- size_t vSizer = * (size_t *) ioAddress;
- unsigned char * p = (unsigned char *) inVal;
- unsigned char length = 1 + *p;
- vSizer += length;
- ::memcpy(*ioAddress, p, length);
- * ioAddress = (U) vSizer;
- }
-
- #endif /* __ACCESSORS__ */